The present invention generally relates to graphics generation, such as, for example, techniques for dynamically serving vector graphics that include characteristics drawn from dynamic data.
The process of dynamically generating HTML pages has been common industry practice since 1997. Examples of this page server technology are Oracle™'s Java™ Server Page (JSP™) technology and Microsoft™'s Active Server Page (ASP™) technology. These technologies allow a programmer to write code that is processed by a server engine to control the generation of HTML and CSS. This code is generally referred to as server-side code, is embedded within traditional HTML and CSS page markup, may draw on external resources such as a database, and is in effect a web template that is executed upon request of a client browser. Each page server technology has its own programming constructs which amount to a proprietary standard that describe engine instructions; however, the resulting output is based on generating HTML and CSS standard compliant output as defined by the various World Wide Web Consortium (W3C) standard committees.
Although the generation of these web templates allows page authors to generate dynamic presentations of data with relative ease, these technologies are oriented toward the formatting of text pages with graphics presentation limited to referencing images, not the dynamic creation of graphics themselves.
There are many application programming interfaces (APIs) that support the creation of graphics programmatically. Oracle's Java2D™ and Microsoft's Graphic Device Interface (GDI™) are two examples. These technologies support the programmatic creation of vector graphics. However, these interfaces are very granular and difficult to use (e.g., they may require programmatic instructions such as draw a line from point x1,y1 to x2,y2). This limits their industry use as foundational components that are leveraged by various drawing tools; they are not frequently used directly to develop dynamic graphic generation solutions due to the time intensive nature of such efforts and the related expense.
Various abstractions have been developed to provide a more manageable interface for the development, storage, and presentation of vector graphics. Most of these technologies are rooted in eXtensible Markup Language (XML). Examples of such technology include the Web Hypertext Application Technology Working Group's (WHATWG) Scalar Vector Graphics (SVG) and the proposed W3C Vector Markup Language (VML). SVG is the vector graphic analog to what HTML is to web pages. SVG uses XML tags to give a high-level description of instructions that can be interpreted by a SVG Interpreter to render a vector graphic image via low-level APIs, such as Java2D or GDI. SVG based images are generally created via SVG-based drawing tools, much like how HTML pages are created via HTML editors. The user of such tools is usually unaware of the underlying data's representation in XML. While the use of standard XML programming techniques to programmatically manipulate the underlying data structures of a vector graphic described via XML (e.g., via SVG) is possible, it is also a time intensive and costly process to develop solutions with.
To facilitate the editing of HTML to introduce server-side code, there is a design paradigm that allows the implementer to transition between views of different visualizations. These views include visualizations of raw HTML tags with server-side code, a design view that allows manipulation of underlying HTML, and a preview of a generated HTML visualization. This design paradigm facilitates multiple perspectives of the pieces that render the final output result. In vector graphic development tools, visualization is limited to drawing tools and static output. Adding programmatic manipulation of underlying XML is a separate task that happens within a coding tool. An integrated approach to manipulating vector graphics, such as those used in HTML development paradigms, does not exist, nor do traditional approaches to the creation of vector graphics easily fit this development model.
Unlike HTML, which has complex presentation layout constructs such as Tables or Lists, XML vector languages are limited to basic primitives such as Rectangles, Ellipses, or Text descriptors. The absence of these layout constructs further compounds the difficulty of programmatically creating complex vector graphics.
Adobe's Flex™, Flash™, and Shockwave™ products do provide the means to programmatically manipulate vector graphics, but with a focus on vector animation. The mapping of data directly into vector graphic presentation can be accomplished, but with the use of proprietary low-level APIs and a scripting language. Similar to the XML vector languages, Adobe's proprietary approach is limited to basic drawing primitives with the addition of the integrated programming interface. The creation of the vector image itself is regulated to the use of drawing canvas such that each element must be drawn by hand or via low-level API calls, which is a time consuming process that requires a rare mix of graphical and programming talent, both of which can be prohibitively expensive for many implementations. These solutions do not supply complex compound primitives or high-level layout constructs needed to facilitate the rapid development of programmatic generation of vector graphics without having to use low-level API calls.
A need exists for improvement in dynamic graphic creation. This, and other needs, are addressed by one or more aspects of the present invention.